/*
 * eegstdpos.cpp
 *
 *  Created on: Dec 31, 2009
 *      Author: zaca
 */

#include <biosignal/eeg/eegstdpos.h>

#include <sstream>

#include <iostream>

namespace biosignal {
namespace eeg {

EEGStdPos::EEGStdPos() {
	add_source("    Nose      90.000   -33.750     1.000");
	add_source("      Nz      90.000   -22.500     1.000");
	add_source("    NFpz      90.000   -11.250     1.000");
	add_source("     Fpz      90.000     0.000     1.000");
	add_source("    AFpz      90.000    11.250     1.000");
	add_source("     AFz      90.000    22.500     1.000");
	add_source("    AFFz      90.000    33.750     1.000");
	add_source("      Fz      90.000    45.000     1.000");
	add_source("    FFCz      90.000    56.250     1.000");
	add_source("     FCz      90.000    67.500     1.000");
	add_source("    FCCz      90.000    78.750     1.000");
	add_source("      Cz       0.000    90.000     1.000");
	add_source("    CCPz     -90.000    78.750     1.000");
	add_source("     CPz     -90.000    67.500     1.000");
	add_source("    CPPz     -90.000    56.250     1.000");
	add_source("      Pz     -90.000    45.000     1.000");
	add_source("    PPOz     -90.000    33.750     1.000");
	add_source("     POz     -90.000    22.500     1.000");
	add_source("    POOz     -90.000    11.250     1.000");
	add_source("      Oz     -90.000     0.000     1.000");
	add_source("     OIz     -90.000   -11.250     1.000");
	add_source("      Iz     -90.000   -22.500     1.000");
	add_source("     N1h      99.000   -22.500     1.000");
	add_source("      N1     108.000   -22.500     1.000");
	add_source("    AFp9     117.000   -22.500     1.000");
	add_source("     AF9     126.000   -22.500     1.000");
	add_source("    AFF9     135.000   -22.500     1.000");
	add_source("      F9     144.000   -22.500     1.000");
	add_source("    FFT9     153.000   -22.500     1.000");
	add_source("     FT9     162.000   -22.500     1.000");
	add_source("    FTT9     171.000   -22.500     1.000");
	add_source("      T9     180.000   -22.500     1.000");
	add_source("    TTP9    -171.000   -22.500     1.000");
	add_source("     TP9    -162.000   -22.500     1.000");
	add_source("    TPP9    -153.000   -22.500     1.000");
	add_source("      P9    -144.000   -22.500     1.000");
	add_source("    PPO9    -135.000   -22.500     1.000");
	add_source("     PO9    -126.000   -22.500     1.000");
	add_source("    POO9    -117.000   -22.500     1.000");
	add_source("      I1    -108.000   -22.500     1.000");
	add_source("     I1h     -99.000   -22.500     1.000");
	add_source("   NFp1h      99.000   -11.250     1.000");
	add_source("    NFp1     108.000   -11.250     1.000");
	add_source("   AFp9h     117.000   -11.250     1.000");
	add_source("    AF9h     126.000   -11.250     1.000");
	add_source("   AFF9h     135.000   -11.250     1.000");
	add_source("     F9h     144.000   -11.250     1.000");
	add_source("   FFT9h     153.000   -11.250     1.000");
	add_source("    FT9h     162.000   -11.250     1.000");
	add_source("   FTT9h     171.000   -11.250     1.000");
	add_source("     T9h     180.000   -11.250     1.000");
	add_source("   TTP9h    -171.000   -11.250     1.000");
	add_source("    TP9h    -162.000   -11.250     1.000");
	add_source("   TPP9h    -153.000   -11.250     1.000");
	add_source("     P9h    -144.000   -11.250     1.000");
	add_source("   PPO9h    -135.000   -11.250     1.000");
	add_source("    PO9h    -126.000   -11.250     1.000");
	add_source("   POO9h    -117.000   -11.250     1.000");
	add_source("     OI1    -108.000   -11.250     1.000");
	add_source("    OI1h     -99.000   -11.250     1.000");
	add_source("    Fp1h      99.000     0.000     1.000");
	add_source("     Fp1     108.000     0.000     1.000");
	add_source("    AFp7     117.000     0.000     1.000");
	add_source("     AF7     126.000     0.000     1.000");
	add_source("    AFF7     135.000     0.000     1.000");
	add_source("      F7     144.000     0.000     1.000");
	add_source("    FFT7     153.000     0.000     1.000");
	add_source("     FT7     162.000     0.000     1.000");
	add_source("    FTT7     171.000     0.000     1.000");
	add_source("      T7     180.000     0.000     1.000");
	add_source("    TTP7    -171.000     0.000     1.000");
	add_source("     TP7    -162.000     0.000     1.000");
	add_source("    TPP7    -153.000     0.000     1.000");
	add_source("      P7    -144.000     0.000     1.000");
	add_source("    PPO7    -135.000     0.000     1.000");
	add_source("     PO7    -126.000     0.000     1.000");
	add_source("    POO7    -117.000     0.000     1.000");
	add_source("      O1    -108.000     0.000     1.000");
	add_source("     O1h     -99.000     0.000     1.000");
	add_source("     N2h      81.000   -22.500     1.000");
	add_source("      N2      72.000   -22.500     1.000");
	add_source("   AFp10      63.000   -22.500     1.000");
	add_source("    AF10      54.000   -22.500     1.000");
	add_source("   AFF10      45.000   -22.500     1.000");
	add_source("     F10      36.000   -22.500     1.000");
	add_source("   FFT10      27.000   -22.500     1.000");
	add_source("    FT10      18.000   -22.500     1.000");
	add_source("   FTT10       9.000   -22.500     1.000");
	add_source("     T10       0.000   -22.500     1.000");
	add_source("   TTP10      -9.000   -22.500     1.000");
	add_source("    TP10     -18.000   -22.500     1.000");
	add_source("   TPP10     -27.000   -22.500     1.000");
	add_source("     P10     -36.000   -22.500     1.000");
	add_source("   PPO10     -45.000   -22.500     1.000");
	add_source("    PO10     -54.000   -22.500     1.000");
	add_source("   POO10     -63.000   -22.500     1.000");
	add_source("      I2     -72.000   -22.500     1.000");
	add_source("     I2h     -81.000   -22.500     1.000");
	add_source("   NFp2h      81.000   -11.250     1.000");
	add_source("    NFp2      72.000   -11.250     1.000");
	add_source("  AFp10h      63.000   -11.250     1.000");
	add_source("   AF10h      54.000   -11.250     1.000");
	add_source("  AFF10h      45.000   -11.250     1.000");
	add_source("    F10h      36.000   -11.250     1.000");
	add_source("  FFT10h      27.000   -11.250     1.000");
	add_source("   FT10h      18.000   -11.250     1.000");
	add_source("  FTT10h       9.000   -11.250     1.000");
	add_source("    T10h       0.000   -11.250     1.000");
	add_source("  TTP10h      -9.000   -11.250     1.000");
	add_source("   TP10h     -18.000   -11.250     1.000");
	add_source("  TPP10h     -27.000   -11.250     1.000");
	add_source("    P10h     -36.000   -11.250     1.000");
	add_source("  PPO10h     -45.000   -11.250     1.000");
	add_source("   PO10h     -54.000   -11.250     1.000");
	add_source("  POO10h     -63.000   -11.250     1.000");
	add_source("     OI2     -72.000   -11.250     1.000");
	add_source("    OI2h     -81.000   -11.250     1.000");
	add_source("    Fp2h      81.000     0.000     1.000");
	add_source("     Fp2      72.000     0.000     1.000");
	add_source("    AFp8      63.000     0.000     1.000");
	add_source("     AF8      54.000     0.000     1.000");
	add_source("    AFF8      45.000     0.000     1.000");
	add_source("      F8      36.000     0.000     1.000");
	add_source("    FFT8      27.000     0.000     1.000");
	add_source("     FT8      18.000     0.000     1.000");
	add_source("    FTT8       9.000     0.000     1.000");
	add_source("      T8       0.000     0.000     1.000");
	add_source("    TTP8      -9.000     0.000     1.000");
	add_source("     TP8     -18.000     0.000     1.000");
	add_source("    TPP8     -27.000     0.000     1.000");
	add_source("      P8     -36.000     0.000     1.000");
	add_source("    PPO8     -45.000     0.000     1.000");
	add_source("     PO8     -54.000     0.000     1.000");
	add_source("    POO8     -63.000     0.000     1.000");
	add_source("      O2     -72.000     0.000     1.000");
	add_source("     O2h     -81.000     0.000     1.000");
	add_source("     T7h     180.000    11.250     1.000");
	add_source("      C5     180.000    22.500     1.000");
	add_source("     C5h     180.000    33.750     1.000");
	add_source("      C3     180.000    45.000     1.000");
	add_source("     C3h     180.000    56.250     1.000");
	add_source("      C1     180.000    67.500     1.000");
	add_source("     C1h     180.000    78.750     1.000");
	add_source("     T8h       0.000    11.250     1.000");
	add_source("      C6       0.000    22.500     1.000");
	add_source("     C6h       0.000    33.750     1.000");
	add_source("      C4       0.000    45.000     1.000");
	add_source("     C4h       0.000    56.250     1.000");
	add_source("      C2       0.000    67.500     1.000");
	add_source("     C2h       0.000    78.750     1.000");
	add_source("      F3     129.254    29.833     1.000");
	add_source("      F4      50.746    29.833     1.000");
	add_source("      P3    -129.254    29.833     1.000");
	add_source("      P4     -50.746    29.833     1.000");
	add_source("      F5     138.891    15.619     1.000");
	add_source("      F6      41.109    15.619     1.000");
	add_source("      P5    -138.891    15.619     1.000");
	add_source("      P6     -41.109    15.619     1.000");
	add_source("      F1     112.953    40.722     1.000");
	add_source("      F2      67.047    40.722     1.000");
	add_source("      P1    -112.953    40.722     1.000");
	add_source("      P2     -67.047    40.722     1.000");
	add_source("     F7h     141.913     7.907     1.000");
	add_source("     F8h      38.087     7.907     1.000");
	add_source("     P7h    -141.913     7.907     1.000");
	add_source("     P8h     -38.087     7.907     1.000");
	add_source("     F5h     134.752    22.998     1.000");
	add_source("     F6h      45.248    22.998     1.000");
	add_source("     P5h    -134.752    22.998     1.000");
	add_source("     P6h     -45.248    22.998     1.000");
	add_source("     F3h     122.046    35.889     1.000");
	add_source("     F4h      57.954    35.889     1.000");
	add_source("     P3h    -122.046    35.889     1.000");
	add_source("     P4h     -57.954    35.889     1.000");
	add_source("     F1h     102.055    43.890     1.000");
	add_source("     F2h      77.945    43.890     1.000");
	add_source("     P1h    -102.055    43.890     1.000");
	add_source("     P2h     -77.945    43.890     1.000");
	add_source("     FC3     151.481    40.847     1.000");
	add_source("     FC4      28.519    40.847     1.000");
	add_source("     CP3    -151.481    40.847     1.000");
	add_source("     CP4     -28.519    40.847     1.000");
	add_source("     FC5     158.854    20.773     1.000");
	add_source("     FC6      21.146    20.773     1.000");
	add_source("     CP5    -158.854    20.773     1.000");
	add_source("     CP6     -21.146    20.773     1.000");
	add_source("     FC1     133.587    58.627     1.000");
	add_source("     FC2      46.413    58.627     1.000");
	add_source("     CP1    -133.587    58.627     1.000");
	add_source("     CP2     -46.413    58.627     1.000");
	add_source("    FT7h     160.798    10.433     1.000");
	add_source("    FT8h      19.202    10.433     1.000");
	add_source("    TP7h    -160.798    10.433     1.000");
	add_source("    TP8h     -19.202    10.433     1.000");
	add_source("    FC5h     155.912    30.952     1.000");
	add_source("    FC6h      24.088    30.952     1.000");
	add_source("    CP5h    -155.912    30.952     1.000");
	add_source("    CP6h     -24.088    30.952     1.000");
	add_source("    FC3h     144.625    50.235     1.000");
	add_source("    FC4h      35.375    50.235     1.000");
	add_source("    CP3h    -144.625    50.235     1.000");
	add_source("    CP4h     -35.375    50.235     1.000");
	add_source("    FC1h     115.626    64.984     1.000");
	add_source("    FC2h      64.374    64.984     1.000");
	add_source("    CP1h    -115.626    64.984     1.000");
	add_source("    CP2h     -64.374    64.984     1.000");
	add_source("     AF3     113.312    15.040     1.000");
	add_source("     AF4      66.688    15.040     1.000");
	add_source("     PO3    -113.312    15.040     1.000");
	add_source("     PO4     -66.688    15.040     1.000");
	add_source("     AF5     120.854     7.908     1.000");
	add_source("     AF6      59.146     7.908     1.000");
	add_source("     PO5    -120.854     7.908     1.000");
	add_source("     PO6     -59.146     7.908     1.000");
	add_source("     AF1     102.721    20.458     1.000");
	add_source("     AF2      77.279    20.458     1.000");
	add_source("     PO1    -102.721    20.458     1.000");
	add_source("     PO2     -77.279    20.458     1.000");
	add_source("    AF7h     123.694     4.005     1.000");
	add_source("    AF8h      56.306     4.005     1.000");
	add_source("    PO7h    -123.694     4.005     1.000");
	add_source("    PO8h     -56.306     4.005     1.000");
	add_source("    AF5h     117.408    11.630     1.000");
	add_source("    AF6h      62.592    11.630     1.000");
	add_source("    PO5h    -117.408    11.630     1.000");
	add_source("    PO6h     -62.592    11.630     1.000");
	add_source("    AF3h     108.359    18.087     1.000");
	add_source("    AF4h      71.641    18.087     1.000");
	add_source("    PO3h    -108.359    18.087     1.000");
	add_source("    PO4h     -71.641    18.087     1.000");
	add_source("    AF1h      96.517    21.977     1.000");
	add_source("    AF2h      83.483    21.977     1.000");
	add_source("    PO1h     -96.517    21.977     1.000");
	add_source("    PO2h     -83.483    21.977     1.000");
	add_source("    AFp3     106.794     7.311     1.000");
	add_source("    AFp4      73.206     7.311     1.000");
	add_source("    POO3    -106.794     7.311     1.000");
	add_source("    POO4     -73.206     7.311     1.000");
	add_source("    AFp5     112.551     3.800     1.000");
	add_source("    AFp6      67.449     3.800     1.000");
	add_source("    POO5    -112.551     3.800     1.000");
	add_source("    POO6     -67.449     3.800     1.000");
	add_source("    AFp1      99.082    10.141     1.000");
	add_source("    AFp2      80.918    10.141     1.000");
	add_source("    POO1     -99.082    10.141     1.000");
	add_source("    POO2     -80.918    10.141     1.000");
	add_source("    AFF3     120.670    22.700     1.000");
	add_source("    AFF4      59.330    22.700     1.000");
	add_source("    PPO3    -120.670    22.700     1.000");
	add_source("    PPO4     -59.330    22.700     1.000");
	add_source("    AFF5     129.623    11.966     1.000");
	add_source("    AFF6      50.377    11.966     1.000");
	add_source("    PPO5    -129.623    11.966     1.000");
	add_source("    PPO6     -50.377    11.966     1.000");
	add_source("    AFF1     107.147    30.720     1.000");
	add_source("    AFF2      72.853    30.720     1.000");
	add_source("    PPO1    -107.147    30.720     1.000");
	add_source("    PPO2     -72.853    30.720     1.000");
	add_source("   AFF7h     132.702     6.068     1.000");
	add_source("   AFF8h      47.298     6.068     1.000");
	add_source("   PPO7h    -132.702     6.068     1.000");
	add_source("   PPO8h     -47.298     6.068     1.000");
	add_source("   AFF5h     125.648    17.573     1.000");
	add_source("   AFF6h      54.352    17.573     1.000");
	add_source("   PPO5h    -125.648    17.573     1.000");
	add_source("   PPO6h     -54.352    17.573     1.000");
	add_source("   AFF3h     114.474    27.207     1.000");
	add_source("   AFF4h      65.526    27.207     1.000");
	add_source("   PPO3h    -114.474    27.207     1.000");
	add_source("   PPO4h     -65.526    27.207     1.000");
	add_source("   AFF1h      98.854    32.973     1.000");
	add_source("   AFF2h      81.146    32.973     1.000");
	add_source("   PPO1h     -98.854    32.973     1.000");
	add_source("   PPO2h     -81.146    32.973     1.000");
	add_source("    FFC3     139.449    36.019     1.000");
	add_source("    FFC4      40.551    36.019     1.000");
	add_source("    CPP3    -139.449    36.019     1.000");
	add_source("    CPP4     -40.551    36.019     1.000");
	add_source("    FFC5     148.658    18.605     1.000");
	add_source("    FFC6      31.342    18.605     1.000");
	add_source("    CPP5    -148.658    18.605     1.000");
	add_source("    CPP6     -31.342    18.605     1.000");
	add_source("    FFC1     121.162    50.192     1.000");
	add_source("    FFC2      58.838    50.192     1.000");
	add_source("    CPP1    -121.162    50.192     1.000");
	add_source("    CPP2     -58.838    50.192     1.000");
	add_source("   FFT7h     151.293     9.383     1.000");
	add_source("   FFT8h      28.707     9.383     1.000");
	add_source("   TPP7h    -151.293     9.383     1.000");
	add_source("   TPP8h     -28.707     9.383     1.000");
	add_source("   FFC5h     144.847    27.547     1.000");
	add_source("   FFC6h      35.153    27.547     1.000");
	add_source("   CPP5h    -144.847    27.547     1.000");
	add_source("   CPP6h     -35.153    27.547     1.000");
	add_source("   FFC3h     131.815    43.741     1.000");
	add_source("   FFC4h      48.185    43.741     1.000");
	add_source("   CPP3h    -131.815    43.741     1.000");
	add_source("   CPP4h     -48.185    43.741     1.000");
	add_source("   FFC1h     106.951    54.636     1.000");
	add_source("   FFC2h      73.049    54.636     1.000");
	add_source("   CPP1h    -106.951    54.636     1.000");
	add_source("   CPP2h     -73.049    54.636     1.000");
	add_source("    FCC3     165.214    43.935     1.000");
	add_source("    FCC4      14.786    43.935     1.000");
	add_source("    CCP3    -165.214    43.935     1.000");
	add_source("    CCP4     -14.786    43.935     1.000");
	add_source("    FCC5     169.351    22.070     1.000");
	add_source("    FCC6      10.649    22.070     1.000");
	add_source("    CCP5    -169.351    22.070     1.000");
	add_source("    CCP6     -10.649    22.070     1.000");
	add_source("    FCC1     152.968    64.990     1.000");
	add_source("    FCC2      27.032    64.990     1.000");
	add_source("    CCP1    -152.968    64.990     1.000");
	add_source("    CCP2     -27.032    64.990     1.000");
	add_source("   FTT7h     170.382    11.048     1.000");
	add_source("   FTT8h       9.618    11.048     1.000");
	add_source("   TTP7h    -170.382    11.048     1.000");
	add_source("   TTP8h      -9.618    11.048     1.000");
	add_source("   FCC5h     167.745    33.045     1.000");
	add_source("   FCC6h      12.255    33.045     1.000");
	add_source("   CCP5h    -167.745    33.045     1.000");
	add_source("   CCP6h     -12.255    33.045     1.000");
	add_source("   FCC3h     160.973    54.657     1.000");
	add_source("   FCC4h      19.027    54.657     1.000");
	add_source("   CCP3h    -160.973    54.657     1.000");
	add_source("   CCP4h     -19.027    54.657     1.000");
	add_source("   FCC1h     134.645    74.147     1.000");
	add_source("   FCC2h      45.355    74.147     1.000");
	add_source("   CCP1h    -134.645    74.147     1.000");
	add_source("   CCP2h     -45.355    74.147     1.000");
	add_source("      A1     180.000   -22.500     1.000");
	add_source("      A2       0.000   -22.500     1.000");
	add_source("     LPA     180.000   -22.500     1.000");
	add_source("     RPA       0.000   -22.500     1.000");
	add_source("      LM    -162.000   -22.500     1.000");
	add_source("      RM     -18.000   -22.500     1.000");
}

void EEGStdPos::add_source(std::string source_line) {
	std::string label;
	double theta, phi, radio;
	std::stringstream ss(source_line);
	ss >> label;
	ss >> theta >> phi >> radio;

//	std::cout << label << " : " << theta << " , " << phi << " , " << radio
//			<< std::endl;
	m_std_positions[label] = Position(theta, phi, radio);

}

const Position& EEGStdPos::get_std_position(std::string label) const throw(PositionUndefined){
	const Position& position = m_std_positions.find(label)->second;
	if(!position.defined)
		throw PositionUndefined(label);
	return position;
}

}
}
